#include <stdio.h>
#include <stdlib.h>

typedef struct node{
    int data;
    node * left,* right;
}TreeNode;
TreeNode * RebuildTree(int arr[],int n){
    TreeNode ** s=(TreeNode **)malloc(sizeof(TreeNode *)*(n));
    int p,q;
    for(int i=0;i<n;i++){
        s[i]=(TreeNode *)malloc(sizeof(TreeNode));
        s[i]->data=arr[i];
        s[i]->left=s[i]->right=NULL;
    }
    for(p=0,q=1;q<n;){
        if(s[q]->data!=-1){
            s[p]->left=s[q++];
        } else{
            q++;
        }
        if(s[q]->data!=-1){
            s[p]->right=s[q++];
        } else{
            q++;
        }
        p++;
    }
    return s[0];
}

void PrintByFloor(TreeNode * root){
    TreeNode * p=root;
    TreeNode ** s=(TreeNode **)malloc(sizeof(TreeNode *)*15);
    s[0]=p;
    printf("%d\n",p->data);
    int i=1,k=1;
    while(p){
        if(p->left){
            s[i++]=p->left;
            printf("%d\n",p->left->data);
        }
        if(p->right){
            s[i++]=p->right;
            printf("%d\n",p->right->data);
        }
        p=s[k++];
    }
}

void midPrint(TreeNode * root)
{
    if(root){

        midPrint(root->left);
        printf("%d\n",root->data);
        midPrint(root->right);
    }
}
int main(void){
    int arr[15]={1,2,3,4,5,6,7,8,9,10,11,-1,12,-1,13};
    TreeNode * root = RebuildTree(arr,15);
    PrintByFloor(root);
    //midPrint(root);
    return 0;
}
